查看原文
其他

数据清洗 常用正则表达式大全

大邓 大邓和他的Python 2019-04-26

数据挖掘全流程包括采集、清洗和分析。而清洗工作往往会占到数据挖掘的80%的工作量。比如,最常见的文本数据,计算机是无法分析文本数据的,我们需要从文本中抽取出需要的数据,并将其编码为数字。这个从文本中抽取指定信息,往往需要用到正则表达式

正则表达式语法

本小节语法比较难,大家看不懂也没关系。只需要保存该表,事后勤翻看即可。大家可以跳过此图,直接看后面的实际代码例子。

常用数字表达式

[0-9]+

匹配出字符串中0-9 中的任意数字信息,该信息满足数字出现一次或者多次

import re

test = "hello 2019's world"

#匹配出test中数字
pattern = '[0-9]+'

re.findall(pattern, test)
['2019']

\d{n}

匹配出字符串中n位的数字。n是数字出现次数,例子中我们设置为4

test = "hello 2019's world"

#匹配出test中数字
pattern = '\d{4}'

re.findall(pattern, test)
['2019']

\d{n,}

匹配出字符串中整数至少出现n次

test = "hello 2019's world"

#将\d{n,}中的n改成0,1,2,3,4分别试试运行结果
pattern = '\d{4,}'

re.findall(pattern, test)
['2019']

\d{m,n}

匹配出字符串中的数字信息,该信息满足整数出现m-n次。

test = "hello 2019's world"

#整数出现2-5次,也可以是1-7次。只要m<4, n>4即可
pattern = '\d{2,5}'

re.findall(pattern, test)
['2019']

校验字符的表达式

[\u4e00-\u9fa5]+

匹配出字符串中的汉字

test = "亲们,让我们在2018一起学习Python_Language"

#匹配出test中的中文
pattern = '[\u4e00-\u9fa5]+'

re.findall(pattern, test)
['亲们', '让我们在', '一起学习']

[A-Za-z0-9]+

匹配出字符串中的英文和数字

test = "亲们,让我们在2018一起学习Python_Language"

#匹配出test中的英文和数字
pattern = '[A-Za-z0-9]+'

re.findall(pattern, test)
['2018', 'Python', 'Language']

.{m,n}

对某字符串进行匹配,匹配出m-n长度的所有字符串

test = "亲们,让我们在2018一起学习Python_Language"

#例子,匹配出test中长度在1-4所有的字符串
pattern = '.{1,4}'

re.findall(pattern, test)
['亲们,让', '我们在2', '018一', '起学习P', 'ytho', 'n_La', 'ngua', 'ge']

[A-Za-z]+

匹配出字符串中的英文字符,不考虑大小写

test = "亲们,让我们在2018一起学习Python_Language"

#匹配出test中的英文字符,不考虑大小写
pattern = '[A-Za-z]+'

re.findall(pattern, test)
['Python', 'Language']

[A-Z]+

匹配出字符串中的大写英文字符

test = "亲们,让我们在2018一起学习Python_Language"

#匹配出test中大写英文字符
pattern = '[A-Z]+'

re.findall(pattern, test)
['P', 'L']

[a-z]+

匹配出字符串中的小写英文字符

test = "亲们,让我们在2018一起学习Python_Language"

#匹配出test中小写英文字符
pattern = '[a-z]+'

re.findall(pattern, test)
['ython', 'anguage']

[A-Za-z0-9]+

匹配出字符串中的英文和数字信息

test = "亲们,让我们在2018一起学习Python_Language"

#匹配出test中的英文和数字信息
pattern = '[A-Za-z0-9]+'

re.findall(pattern, test)
['2018', 'Python', 'Language']

\w+

识别以空格为间隔的字符串,得到其中的数字、字符、下划线。例如

test = "亲 们,让 我 们 在 2018 一 起 学 习 Python_Language"

pattern = '\w+'

re.findall(pattern, test)
['亲', '们', '让', '我', '们', '在', '2018', '一', '起', '学', '习', 'Python_Language']

[\u4e00-\u9fa5A-Za-z0-9_]+

匹配出字符串中的中英文、数字和下划线信息

test = "亲们,让我们!!在2018 一起学习Python_Language!"

#匹配出test中的中英文、数字和下划线信息
pattern = '[\u4e00-\u9fa5A-Za-z0-9_]+'

re.findall(pattern, test)
['亲们', '让我们', '在2018', '一起学习Python_Language']

特殊需求表达式

邮箱

[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+ 匹配出字符串中的邮箱信息

test = "报名Python课程的联系手机18888886688, 电话0536-6666888, 邮箱 dadeng6688_hit@qq.com, 具体课程信息可登陆www.dadengpython.com"

#匹配出test中的邮箱信息
pattern = '[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+'

re.findall(pattern, test)
['dadeng6688_hit@qq.com']

url

http://[\w+.]+ 匹配出字符串中的域名信息

test = "报名Python课程的联系手机18888886688, 电话0536-6666888, 邮箱 dadeng6688_hit@qq.com, 具体课程信息可登陆http://www.dadengpython.com.cn"

#匹配出test中的url信息
pattern = 'http://[\w+.]+'

re.findall(pattern, test)
['http://www.dadengpython.com.cn']

手机号

1[3|4|5|8][0-9]\d{4,8} 匹配出字符串中的手机号码信息

test = "报名Python课程的联系手机18888886688, 电话0536-6666888, 邮箱 dadeng6688_hit@qq.com, 具体课程信息可登陆http://www.dadengpython.com.cn"

#匹配出test中的手机信息
pattern = '1[3|4|5|8][0-9]\d{4,8}'

re.findall(pattern, test)
['18888886688']

电话号码

\d{3}-\d{8}|\d{4}-\d{7} 匹配出字符串中的电话号码信息

test = "报名Python课程的联系手机18888886688, 电话0536-6666888, 邮箱 dadeng6688_hit@qq.com, 具体课程信息可登陆http://www.dadengpython.com.cn"

#匹配出test中的电话信息
pattern = '\d{3}-\d{8}|\d{4}-\d{7}'

re.findall(pattern, test)
['0536-6666888']

日期格式

形如2018-09-11,\d{4}-\d{1,2}-\d{1,2} 匹配出字符串中的日期信息。

test = "报名Python课程截至日期2018-08-30。报名联系手机18888886688"

#匹配出test中的日期信息
pattern = '\d{4}-\d{1,2}-\d{1,2}'

re.findall(pattern, test)
['2018-08-30']

空行信息

[\n\s\r]+ 匹配出字符串的空行,可以用该空行做一些操作。

test = """报名Python课程

截至日期2018-08-30。
    报名联系手机

18888886688"""



pattern = '[\n\s\r]+'

#使用空行去分割字符串
re.split(pattern, test)
['报名Python课程', '截至日期2018-08-30。', '报名联系手机', '18888886688']
test = """报名Python课程

截至日期2018-08-30。
    报名联系手机

18888886688"""



pattern = '[\n\s\r]+'

#将空行替换为空
re.sub(pattern, '', test)
'报名Python课程截至日期2018-08-30。报名联系手机18888886688'


往期文章

100G Python学习资料(免费下载)

100G 文本分析语料资源(免费下载)     

 typing库:让你的代码阅读者再也不用猜猜猜

大邓强力推荐-jupyter notebook使用小技巧  

PySimpleGUI: 开发自己第一个软件

深度特征合成:自动生成机器学习中的特征

Python 3.7中dataclass的终极指南(一) 

Python 3.7中dataclass的终极指南(二) 

2017年度15个最好的数据科学领域Python库    

使用Pandas更好的做数据科学

[计算消费者的偏好]推荐系统与协同过滤、奇异值分解

机器学习: 识别图片中的数字

应用PCA降维加速模型训练

如何从文本中提取特征信息?

使用sklearn做自然语言处理-1 

使用sklearn做自然语言处理-2

机器学习|八大步骤解决90%的NLP问题    

Python圈中的符号计算库-Sympy

Python中处理日期时间库的使用方法 

【视频讲解】Scrapy递归抓取简书用户信息

美团商家信息采集神器 

用chardect库解决网页乱码问题 



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存